package com.kevinkk.dp;

/**
 * 给你一个整数数组 prices ，其中 prices[i] 表示某支股票第 i 天的价格。
 * 在每一天，你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买，然后在 同一天 出售。
 * 返回 你能获得的 最大 利润 。
 *
 * 这道题允许多次买卖股票，因此
 * dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] - prices[i]);
 */
public class BestTimeToBuyAndSellStockII {
    class Solution {
        public int maxProfit(int[] prices) {
            int length = prices.length;
            int[][] dp = new int[length][2];
            dp[0][0] = -prices[0];
            dp[0][1] = 0;

            for (int i = 1; i < length; i++) {
                dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] - prices[i]);
                dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] + prices[i]);
            }

            return Math.max(dp[length - 1][0], dp[length - 1][1]);
        }
    }
}
